package model

import (
	"fmt"
	"github.com/jinzhu/gorm"
)

type RoleMenu struct {
	RoleId string `json:"roleId"` // 角色id
	MenuId string `json:"menuId"` // 菜单id
}

// 重置表名
func (r *RoleMenu) TableName() string {
	return "sys_role_menu"
}

// 删除角色菜单关联表
func (r *RoleMenu) Delete(db *gorm.DB, roleId string) error {
	return db.Where("role_id = ?", roleId).Delete(&r).Error
}

// 批量插入角色-菜单表
func (r *RoleMenu) Create(db *gorm.DB, roleId string, menuIds []string) error {
	if len(menuIds) == 0 {
		return nil
	}
	sqlStr := "INSERT INTO sys_role_menu (role_id, menu_id) VALUES "
	for i := 0; i < len(menuIds); i++ {
		sqlStr += fmt.Sprintf("('%s', '%s'),", roleId, menuIds[i])
	}
	sqlStr = sqlStr[0:(len(sqlStr) - 1)]
	return db.Exec(sqlStr).Error
}

// 根据角色id获取绑定的菜单中间表集合
func (r *RoleMenu) GetMenuIdsByRoleId(db *gorm.DB, roleId string) ([]*RoleMenu, error) {
	var roleMenu []*RoleMenu
	// 获取角色所有的不为父菜单的集合
	if err := db.Raw("SELECT srm.* FROM sys_role_menu srm LEFT JOIN sys_menu sm ON sm.id = srm.menu_id WHERE srm.role_id = ? AND (sm.id NOT IN (SELECT sys_menu.parent_id FROM sys_role_menu LEFT JOIN sys_menu ON sys_menu.id = sys_role_menu.menu_id WHERE sys_role_menu.role_id = ?))", roleId, roleId).Find(&roleMenu).Error; err != nil {
		return roleMenu, err
	}
	return roleMenu, nil
}
